package com.zhoumy.juc.cas;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 多线程环境中不使用原子类保证线程安全i++（基本数据类型）
 */
class T1
{
    private volatile int count = 0;
    //若要线程安全执行执行count++，需要加锁
    public synchronized void increment()
    {
        count++;
    }
    public int getCount()
    {
        return count;
    }
}

/**
 * 多线程环境中使用原子类保证线程安全i++（基本数据类型）---------->类似于乐观锁
 */
class T2
{
    private AtomicInteger count = new AtomicInteger();

    public void increment()
    {
        count.incrementAndGet();
    }
    //使用AtomicInteger之后，不需要加锁，也可以实现线程安全。
    public int getCount()
    {
        return count.get();
    }
}

/**
 * @author zhoumy
 * @create 2024年6月17日16:21:01
 */
public class CASDemo {
    public static void main(String[] args) {
        AtomicInteger atomicInteger = new AtomicInteger(5);
        System.out.println(atomicInteger.compareAndSet(5, 2022) + "\t" + atomicInteger.get());//true	2022
        System.out.println(atomicInteger.compareAndSet(5, 2022) + "\t" + atomicInteger.get());//false 2022
    }
}
